package lanqiaobei2014;

public class _010扑克序列 {
    public static void main(String[] args) {
        /**
         * 扑克序列
         * A A 2 2 3 3 4 4， 一共4对扑克牌。请你把它们排成一行。
         * 要求：两个 A 中间有 1 张牌，两个 2 之间有 2 张牌，两个 3之间有 3 张牌，两个 4 之间有 4 张牌。
         * 请填写出所有符合要求的排列中，字典序最小的那个。
         * 例如：22AA334422AA3344 比 A2A23344A2A23344 字典序小。当然，它们都不是满足要求的答案。
         */
        char[] a = {'A','A','2','2','3','3','4','4'};
        per(a,0);
    }

    private static void per(char[] a, int k) {
        if (k == a.length){
            String s = new String(a);
            if (check(s)){
                System.out.println(s);
            };
        }

        for (int i = k; i < a.length ;i++){
            char temp = a[k];
            a[k] = a[i];
            a[i] = temp;

            per(a,k+1);

            temp = a[k];
            a[k] = a[i];
            a[i] = temp;

        }
    }

    private static boolean check(String s) {
        if (s.lastIndexOf('A') - s.indexOf('A') == 2
            &&s.lastIndexOf('2') - s.indexOf('2') ==3
            &&s.lastIndexOf('3') - s.indexOf('3') == 4
            &&s.lastIndexOf('4') - s.indexOf('4') == 5){
            return true;
        }
        return false;
    }
}
